package com.yunkaweilai.android.utils;

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Rect;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;

/**
 * 图片压缩
 */

public class ImageUtilsK {

    /** 删除单个文件
     * @param filePath$Name 要删除的文件的文件名
     * @return 单个文件删除成功返回true，否则返回false
     */
    public static boolean deleteSingleFile(String filePath$Name) {
        File file = new File(filePath$Name);
        // 如果文件路径所对应的文件存在，并且是一个文件，则直接删除
        if (file.exists() && file.isFile()) {
            if (file.delete()) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

    /**
     * //sd 卡路径
     * fileDir = Environment.getExternalStorageDirectory();
     * File imageFile = new File(fileDir +"/DCIM/Camera","monkey.jpg"); //图片的路径
     * BitmapFactory.Options opts = new BitmapFactory.Options();
     * Bitmap bitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath(), opts);// 文件路径
     * compressImage2File(bitmap,new File(fileDir,"qualityCompress.jpeg"));  // 参数一： 输出的文件路径 参数二 ： 输出的文件
     * 图片的质量压缩 降低图片质量
     * 原理 ：通过算法扣掉（同化）了 图片中的一些某个点附近相近的像素，达到降低质量 减少 文件大小的目的
     * 注意 ： 他其实只能 实现对 file 的影响，对加载这个图片出来的bitmap 内存是无法节省的 ，还是那么大
     * 因为 bitmap 在内存中的大小是按照 像素 计算的 ，也就是width * height ，对于质量压缩，并不会改变图片的真实的像素（像素大小不会变）。
     * 使用场景 ：
     * 将图片保存到本地 ，或者将图片上传 到服务器 ，根据实际需求来 。
     */
    public static void compressImage2File(Bitmap bmp, File file) {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
            bmp.compress(Bitmap.CompressFormat.JPEG, 80, bos);
        try {
            FileOutputStream fos = new FileOutputStream(file);
            fos.write(bos.toByteArray());
            fos.flush();
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * fileDir = Environment.getExternalStorageDirectory();
     * File imageFile = new File(fileDir +"/DCIM/Camera","monkey.jpg"); //图片的路径
     * BitmapFactory.Options opts = new BitmapFactory.Options();
     * Bitmap bitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath(), opts);// 文件路径
     * compressImage2FileBySize(bitmap,new File(fileDir,"sizeCompress.jpeg"));  // 参数一： 输出的文件路径 参数二 ： 输出的文件
     * 2.尺寸压缩
     * 为了方便使用 顺便把质量也压缩了
     * 原理 ： 通过减少单位尺寸的像素值，真正意义上的降低像素值。
     * 使用场景 ： 缓存缩略图 (头像的处理)
     *
     * @param bmp  bitmap
     * @param file 文件
     */
    public static void compressImage2FileBySize(Bitmap bmp, File file) {
        //压缩尺寸倍数 值越大 ，图片的尺寸就越小
        int ratio = 2;
        Bitmap result = Bitmap.createBitmap(bmp.getWidth() / ratio, bmp.getHeight() / ratio, Bitmap.Config.ARGB_8888);
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
            Canvas canvas = new Canvas(result);
            Rect rect = new Rect(0, 0, bmp.getWidth() / ratio, bmp.getHeight() / ratio);
            canvas.drawBitmap(bmp, null, rect, null);
            result.compress(Bitmap.CompressFormat.JPEG, 80, bos);
        try {
            FileOutputStream fos = new FileOutputStream(file);
            fos.write(bos.toByteArray());
            fos.flush();
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
